package order.management.IO;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.util.Iterator;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import order.management.models.OPDept;
import order.management.models.Order;
import order.management.models.Product;
import order.management.models.Warehouse;
public class AdminFrame extends GenericFrame {
public static int NR_ELEM_IN_TABLE;
public JButton addProductButton;
public JButton seePendingOrders;
private JPanel logOutSeeOrdersPanel;
public JTextField jTextField;
public JButton searchFilterButton;
private JPanel searchPanelButton;
private JScrollPane jPanelContent;
public JTable tableProducts;
private DefaultTableModel tableModel;
// initialize warehouse:
public AdminFrame() {
super();
logInOutButton = new JButton("LOGOUT");
seePendingOrders = new JButton("SEE PENDING ORDERS");
addProductButton = new JButton("ADD new PRODUCT");
logOutSeeOrdersPanel = new JPanel(new BorderLayout());
logOutSeeOrdersPanel.add(addProductButton, BorderLayout.WEST);
logOutSeeOrdersPanel.add(seePendingOrders, BorderLayout.CENTER);
logOutSeeOrdersPanel.add(logInOutButton, BorderLayout.EAST);
jTextField = new JTextField(30);
jTextField.setBounds(10, 30, 300, 300);
jTextField.setBackground(Color.white);
jTextField.setForeground(Color.black);
searchFilterButton = new JButton("Search");
searchPanelButton = new JPanel(new BorderLayout());
JLabel labelType = new JLabel("Filter:");
searchPanelButton.add(labelType, BorderLayout.WEST);
searchPanelButton.add(jTextField, BorderLayout.CENTER);
searchPanelButton.add(searchFilterButton, BorderLayout.EAST);
tableModel = new DefaultTableModel();
tableModel.addColumn("Product");
tableModel.addColumn("Price");
tableModel.addColumn("Stock");
tableModel.addColumn("Description");
tableModel.addColumn("OP1"); // modify
tableModel.addColumn("OP2"); // remove
tableProducts = new JTable(tableModel);
tableProducts.setFillsViewportHeight(true);
jPanelContent = new JScrollPane(tableProducts);
this.updateTable();
frame.setLayout(new BorderLayout());
frame.add(searchPanelButton, BorderLayout.NORTH);
frame.add(jPanelContent, BorderLayout.CENTER);
frame.add(logOutSeeOrdersPanel, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public AdminFrame(Warehouse wh) {
super();
logInOutButton = new JButton("LOGOUT");
seePendingOrders = new JButton("SEE PENDING ORDERS");
addProductButton = new JButton("ADD new PRODUCT");
logOutSeeOrdersPanel = new JPanel(new BorderLayout());
logOutSeeOrdersPanel.add(addProductButton, BorderLayout.WEST);
logOutSeeOrdersPanel.add(seePendingOrders, BorderLayout.CENTER);
logOutSeeOrdersPanel.add(logInOutButton, BorderLayout.EAST);
jTextField = new JTextField(30);
jTextField.setBounds(10, 30, 300, 300);
jTextField.setBackground(Color.white);
jTextField.setForeground(Color.black);
searchFilterButton = new JButton("Search");
searchPanelButton = new JPanel(new BorderLayout());
JLabel labelType = new JLabel("Filter:");
searchPanelButton.add(labelType, BorderLayout.WEST);
searchPanelButton.add(jTextField, BorderLayout.CENTER);
searchPanelButton.add(searchFilterButton, BorderLayout.EAST);
tableModel = new DefaultTableModel();
tableModel.addColumn("Product");
tableModel.addColumn("Price");
tableModel.addColumn("Stock");
tableModel.addColumn("Description");
tableModel.addColumn("OP1");
tableModel.addColumn("OP2");
tableProducts = new JTable(tableModel);
this.updateTable(wh);
tableProducts.setFillsViewportHeight(true);
jPanelContent = new JScrollPane(tableProducts);
frame.setLayout(new BorderLayout());
frame.add(searchPanelButton, BorderLayout.NORTH);
frame.add(jPanelContent, BorderLayout.CENTER);
frame.add(logOutSeeOrdersPanel, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
// initialize warehouse:
public void updateTable() {
Warehouse wh = new Warehouse();
wh.addExistentProduct(new Product("milk", 50, 3, "white"));
wh.addExistentProduct(new Product("rose", 20, 4, "red; it smells like spring"));
Iterator<Product> iterator = wh.products.iterator();
while (iterator.hasNext()) {
Product auxP = iterator.next();
tableModel.addRow(new Object[] { auxP.name, auxP.price, auxP.stock, auxP.description, "MODIFY", "REMOVE" });
}
}
public void updateTable(Warehouse wh) {
this.removeAllRows(); // preserve the order as in warehouse
try {
NR_ELEM_IN_TABLE = wh.products.size();
} catch (NullPointerException ex) {
NR_ELEM_IN_TABLE = 0;
}
// if (NR_ELEM_IN_TABLE == 0) {
// JLabel noElemLabel = new JLabel("no product to be displayed");
// jPanelContent.add(noElemLabel);
// }
if (NR_ELEM_IN_TABLE > 0) {
Iterator<Product> iterator = wh.products.iterator();
while (iterator.hasNext()) {
Product auxP = iterator.next();
tableModel.addRow(
new Object[] { auxP.name, auxP.price, auxP.stock, auxP.description, "MODIFY", "REMOVE" });
}
}
}
public void updateTable(Warehouse wh, String searchFor) {
CharSequence charSequence = searchFor;
if (searchFor.length() == 0) { // empty string
this.updateTable(wh); // the same order as in warehouse
} else if(NR_ELEM_IN_TABLE == wh.products.size()){
Iterator<Product> iterator = wh.products.iterator();
int indexOfProduct = -1;
while (iterator.hasNext()) {
Product auxP = iterator.next();
indexOfProduct++; // indexOfProduct in warehouse/table
if (!auxP.name.contains(charSequence)) {
tableModel.removeRow(indexOfProduct);
indexOfProduct--;
NR_ELEM_IN_TABLE--;
}
}
} // there is a string
}
public void queryModifyProduct(Product p) {
JTextField xField = new JTextField(15); // name
xField.setText(p.name);
JTextField yField = new JTextField(15); // price
yField.setText("" + p.price);
JTextField zField = new JTextField(15);// stock
zField.setText("" + p.stock);
JTextField wField = new JTextField(30);// description
wField.setText("" + p.description);
JPanel myPanel = new JPanel(new GridLayout(4, 1));
myPanel.add(new JLabel("NAME:"));
myPanel.add(xField);
myPanel.add(Box.createHorizontalStrut(15)); // a spacer
myPanel.add(new JLabel("PRICE:"));
myPanel.add(yField);
myPanel.add(Box.createHorizontalStrut(15)); // a spacer
myPanel.add(new JLabel("STOCK:"));
myPanel.add(zField);
myPanel.add(Box.createHorizontalStrut(15)); // a spacer
myPanel.add(new JLabel("DESCRIPTION:"));
myPanel.add(wField);
int result = JOptionPane.showConfirmDialog(null, myPanel, "Modify product:", JOptionPane.OK_CANCEL_OPTION);
if (result == JOptionPane.OK_OPTION) {
p.name = xField.getText();
p.price = Float.parseFloat(yField.getText());
p.stock = Integer.parseInt(zField.getText());
p.description = wField.getText();
}
}
public void seePendingOrders(OPDept orderDept) {
JPanel myPanel;
try {
JLabel[] labelsForOrders = new JLabel[orderDept.orders.size()];
myPanel = new JPanel(new GridLayout(orderDept.orders.size(), 1));
Iterator<Order> iterator = orderDept.orders.iterator();
int indexOfProduct = -1;
while (iterator.hasNext()) {
Order auxOO = iterator.next();
indexOfProduct++; // indexOfProduct in warehouse/table
labelsForOrders[indexOfProduct] = new JLabel(auxOO.toString());
myPanel.add(labelsForOrders[indexOfProduct]);
}
} catch (NullPointerException n) {
JLabel labelForOrders = new JLabel("no pending order");
myPanel = new JPanel();
myPanel.add(labelForOrders);
}
JOptionPane.showConfirmDialog(null, myPanel, "Pending Orders:", JOptionPane.OK_CANCEL_OPTION);
}
public Product getNewProduct() {
Product p = new Product(" ");
JTextField xField = new JTextField(15); // name
JTextField yField = new JTextField(15); // price
JTextField zField = new JTextField(15);// stock
JTextField wField = new JTextField(30);// description
JPanel myPanel = new JPanel(new GridLayout(4, 1));
myPanel.add(new JLabel("NAME:"));
myPanel.add(xField);
myPanel.add(Box.createHorizontalStrut(15)); // a spacer
myPanel.add(new JLabel("PRICE:"));
myPanel.add(yField);
myPanel.add(Box.createHorizontalStrut(15)); // a spacer
myPanel.add(new JLabel("STOCK:"));
myPanel.add(zField);
myPanel.add(Box.createHorizontalStrut(15)); // a spacer
myPanel.add(new JLabel("DESCRIPTION:"));
myPanel.add(wField);
int result = JOptionPane.showConfirmDialog(null, myPanel, "ADD product:", JOptionPane.OK_CANCEL_OPTION);
if (result == JOptionPane.OK_OPTION) {
if (!xField.getText().isEmpty()) {
p.name = xField.getText();
if (!yField.getText().isEmpty()) {
try {
p.price = Float.parseFloat(yField.getText());
} catch (NumberFormatException ex) {
return null; // invalid price
}
try {
p.stock = Math.abs(Integer.parseInt(zField.getText()));
} catch (NumberFormatException ex) {
p.stock = 0;
}
p.description = wField.getText();
System.out.println(p.name + "_p: " + p.price + "_s: " + p.stock + p.description);
return p;
}
}
// return null; //invalid name/price
}
return null; // CANCEL_OP
}
public void addNewProductToTable(Product p) {
tableModel.addRow(
new Object[] { p.name, p.price, p.stock, p.description, new JButton("MODIFY"), new JButton("REMOVE") });
}
public void removeAllRows() {
int n = tableModel.getRowCount();
for (int i = n - 1; i >= 0; i--) {
tableModel.removeRow(i);
}
}
public void removeRowFromTable(int i) {
tableModel.removeRow(i);
}
}